import java.util.ArrayList;
import java.util.List;

/**
 * Clase de apoyo, para metodos generales de la clase torre
 * @author Francisco
 *
 */
public final class TorreHelper {
	/**
	 * Lista de torres que ya realizaron el recorrido
	 */
	private static List<Torre> recorrido =new ArrayList<Torre>(); //contiene la ruta recorrida para evitar ciclos
	
	/**
	 * Obtiene una torre en la lista de torres
	 * @param listTorre Lista de torres por referencia
	 * @param nameTorre Nombre de la torre
	 * @return La primer torre encontrada, en caso de no haber ninguna, regresa null
	 */
	public static Torre getTorre(List<Torre> listTorre, String nameTorre){
			Torre torreReturn=null;
			for (Torre torre:listTorre){
				if (torre.getName().equals(nameTorre)){
					torreReturn = torre;
					
					break;
				}
			}
			
			return torreReturn;
	}
	
	public final static String getRoute(Torre torreInicial, Torre torreFinal){
		
		//Buscamos en todos los enlaces primero	
		String resultFinal = null;
		String result = "";
		//verificamos que no se haya regresado a algún punto en el camino para evitar el ciclo de la busqueda
		if(recorrido.indexOf(torreInicial) != -1) {
			return "";
		}else{
			recorrido.add(torreInicial);
		}
		List<Torre> torres = torreInicial.getTorreLink();
		
		int index = torres.indexOf(torreFinal);
		
		if (index == -1){
			for (Torre torreLocal:torres){
				result = getRoute(torreLocal, torreFinal);
				if( !result.equals("")){
                    break;
                }
			}
		}else{
			result = torres.get(index).getName();
		}
		if( result.equals("")) {
			return "";
		}else{
			resultFinal = String.format(" %s => %s ", torreInicial.getName(), result);
		}
		return resultFinal;
	}
	
	/**
	 * Metodo para limpiar la lista del recorrido
	 */
	public static void clearPath(){
		recorrido.clear();
	}
}
